package com.mazaiting.generator.controller;

import com.mazaiting.common.core.ex.exceptions.BusinessException;
import com.mazaiting.common.core.ex.exceptions.EmptyObjectException;
import com.mazaiting.generator.domain.entity.BaseClassEntity;
import com.mazaiting.generator.domain.form.BaseClassForm;
import com.mazaiting.generator.domain.query.BaseClassQuery;
import com.mazaiting.generator.domain.vo.BaseClassVO;
import com.mazaiting.generator.service.IBaseClassService;
import com.mazaiting.mybatisplus.domain.vo.BasePageVO;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.util.Arrays;

/**
 * 基类管理
 */
@RestController
@RequestMapping("generator/v1/baseclass")
@RequiredArgsConstructor
public class BaseClassController {

    private final IBaseClassService baseClassService;

    /**
     * 基类分页数据
     * @param baseClassQuery 基类查询条件
     * @return 分页数据
     */
    @GetMapping("page")
    public BasePageVO<BaseClassVO> page(@Valid BaseClassQuery baseClassQuery) {
        return baseClassService.page(baseClassQuery);
    }

    /**
     * 根据基类 ID 获取实体
     * @param id 基类 ID
     * @return 基类实体
     */
    @GetMapping("{id}")
    public BaseClassEntity get(@PathVariable("id") Long id) {
        return baseClassService.getById(id);
    }

    /**
     * 新增基类实体
     * @param baseClassForm 表单信息
     * @return true: 新增成功; false: 新增失败
     */
    @PostMapping
    public boolean save(@Valid BaseClassForm baseClassForm) throws BusinessException {
        return baseClassService.save(baseClassForm);
    }

    /**
     * 更新基类实体
     * @param baseClassForm 实体信息
     * @return true: 更新成功; false: 更新失败
     */
    @PutMapping
    public boolean update(@Valid BaseClassForm baseClassForm) throws EmptyObjectException {
        return baseClassService.update(baseClassForm);
    }

    /**
     * 删除基类实体
     * @param ids id 字符串
     * @return true: 删除成功; false: 删除失败
     */
    @DeleteMapping
    public boolean delete(@RequestParam("ids") String ids) {
        return baseClassService.removeBatchByIds(Arrays.stream(ids.split(",")).map(Long::parseLong).toList());
    }

}